Notification Flow
The following diagram shows the high-level phases of the Notification Flow. Detailed step descriptions are provided in the sections below.
High-level Flow
Consent 3.0 replaces continuous polling with an event-subscription model: the Service User registers once for the event types it cares about (consent:changed, consent:revoked), and is then notified either by webhook push or by aggregated polling.
- Subscribe
The Service User creates an event subscription for the event types it wants to receive. See Details - Consent change occurs
A consent-relevant change happens at the Service Provider (e.g. revocation) and bLink matches it against active subscriptions for the associatedgrant_id. - Notification delivery
bLink delivers the notification either by pushing it to the Service User's webhook endpoint, or by making it available for aggregated polling if the Service User has no webhook registered (or the push failed and is pending retry). See Details
Subscribe
- The Service User creates a subscription, listing the event types it wants to be notified about.
POST "api/consent-flow/v3/event-subscriptions"
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.auth123"
-H "Content-Type: application/json"
-H "X-Correlation-ID: 9b2d1a3c-6e4f-4b8a-9d2e-1f3a5c7b9e0d"
-H "X-CorAPI-Target-ID: IIDP99999"
-H "X-PSU-User-Agent: AUTO"
-H "User-Agent: MySU/1.0"
--data '{
"eventTypes": ["consent:changed", "consent:revoked"]
}'
Successful response (201)
{
"id": "7c5f40fc-1b29-4263-a2dd-e127a22a947f",
"eventTypes": ["consent:changed", "consent:revoked"]
}
- bLink validates the requested
eventTypesagainst theEventTypeenum (heartbeat,consent:changed,consent:revoked). - bLink returns the created subscription including its generated
id, which is referenced by later notifications (eventSubscriptionId) and by the polling endpoint. - The Service User can later retrieve, update (
PUT /event-subscriptions/{eventSubscriptionId}), or delete (DELETE /event-subscriptions/{eventSubscriptionId}) the subscription, or list/search existing ones viaGET /event-subscriptionsandGET /event-subscriptions/search.
Notification delivery
Webhook push
- A consent-relevant change occurs at the Service Provider and is reported to bLink.
- bLink resolves which event subscription(s) match the change and builds an
EventNotification. - bLink pushes the notification to the Service User's registered webhook endpoint.
POST "https://su.example.com/event-notifications"
-H "Content-Type: application/json"
-H "X-Correlation-ID: 2f6a8c1d-4b3e-4a9f-8c7d-5e1b9a3f6d2c"
-H "X-CorAPI-Target-ID: IIDP99999"
-H "X-PSU-User-Agent: AUTO"
-H "User-Agent: bLink/1.0"
--data '{
"id": "120066c9-58a1-432b-aa60-712fae7f143e",
"version": "1.0",
"eventType": "consent:revoked",
"eventSubscriptionId": "7c5f40fc-1b29-4263-a2dd-e127a22a947f",
"resourceLink": "/permissions/3f5dd8a4-7e3a-47af-92e8-2e2bc5bcd011",
"creationDateTime": "2026-09-07T07:58:30.996+0100"
}'
Accepted response (202).
No response body.
Rate-limited response (429)
{
"type": "/problems/TECHNICAL_ERROR",
"title": "Too Many Requests - Reduce notification delivery rate.",
"detail": "Notification delivery rate exceeded, retry after the indicated delay",
"instance": "/event-notifications"
}
- The Service User acknowledges receipt with
202. Any2xxmarks the notification delivered. - A
4xxresponse (other than429) is treated as a permanent failure bLink does not retry. - A
5xx,429, or timeout triggers a retry with exponential backoff, up to a 24-hour retry window, after which the notification is dead-lettered and raised for operational alerting. - The Service User deduplicates on
EventNotification.id, since retries may redeliver the same event.
Aggregated polling (fallback / recovery)
- A Service User without a webhook endpoint, or recovering from a gap after exhausted webhook retries, polls for notifications it may have missed.
GET "api/consent-flow/v3/event-subscriptions/7c5f40fc-1b29-4263-a2dd-e127a22a947f/event-notifications?fromEventDateTime=2026-09-07T00:00:00.000%2B0100"
-H "X-Correlation-ID: 5a7e2b1c-9d4f-4c8a-8b6e-3f1a7c9e5b2d"
-H "X-CorAPI-Target-ID: IIDP99999"
-H "X-PSU-User-Agent: AUTO"
-H "User-Agent: MySU/1.0"
Successful response (200)
[
{
"id": "120066c9-58a1-432b-aa60-712fae7f143e",
"version": "1.0",
"eventType": "consent:revoked",
"eventSubscriptionId": "7c5f40fc-1b29-4263-a2dd-e127a22a947f",
"resourceLink": "/permissions/3f5dd8a4-7e3a-47af-92e8-2e2bc5bcd011",
"creationDateTime": "2026-09-07T07:58:30.996+0100"
}
]
- bLink returns all notifications for that subscription since
fromEventDateTime, paginated viacursor/limitand theX-nextCursorresponse header. - A
429response (standard429) signals the Service User to poll less frequently; bLink returns aRetry-Afterheader indicating the minimum delay.
See the Notification API concept for bLink's existing notification service that this design builds on.